from html import escape
from flask import Flask, render_template, url_for
from typing import Optional

# 参考 https://dormousehole.readthedocs.io/en/latest/quickstart.html
# 使用 Flask 创建一个简单的Web应用
#命令行运行 python -m flask --app app run， -app指定文件， 默认文件名为 app.py或 wsgi.py
# 或者可以设置环境变量 FLASK_APP=app.py 然后运行 flask run
# --debug 开启调试模式，自动重载代码
# 生产环境可以使用 gunicorn 或 uwsgi 等 WSGI 服务器来运行 Flask 应用
app = Flask(__name__)
@app.route("/")
def home():
    return "Hello, Flask!"
@app.route('/user/<username>', methods=['GET', 'POST'])
def show_user_profile(username: str):
    # show the user profile for that user
    return f'User {escape(username)}'

# string （缺省值） 接受任何不包含斜杠的文本
# int    （正整数） 接受正整数
# float  （正浮点数） 接受正浮点数
# path   （包含斜杠的文本） 接受包含斜杠的文本
# uuid   （UUID 字符串） 接受 UUID 字符串


@app.route('/post/<int:post_id>')
def show_post(post_id: int):
    # show the post with the given id, the id is an integer
    return f'Post {post_id}'

@app.route('/path/<path:subpath>')
def show_subpath(subpath: str):
    # show the subpath after /path/
    return f'Subpath {escape(subpath)}'
# 带尾斜杠的路径访问时如果不加斜杠会自动重定向到带斜杠的路径
@app.get('/projects/')
def projects():
    return 'The project page'

with app.test_request_context():
    print(url_for('projects'))
    print(url_for('static', filename='style.css'))
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name: Optional[str] = None):
    return render_template('hello.html', person=name)

"""
<!doctype html>
<title>Hello from Flask</title>
{% if person %}
  <h1>Hello {{ person }}!</h1>
{% else %}
  <h1>Hello, World!</h1>
{% endif %}
"""
